package com.yunsom.testdemo.design.interpreter;

/**
 * @author Xbao
 * @description 解释器模式
 * 提供了评估语言的语法或表达式的方式，它属于行为型模式。
 * 这种模式实现了一个表达式接口，该接口解释一个特定的上下文。
 * 这种模式被用在 SQL 解析、符号处理引擎等。
 * @date 2022/6/6 15:14
 */
public class ExpressionTest {

  public static Expression getMaleExpression(){
    // 规则：Jack和Jim是男性
    Expression jack = new TerminalExpression("Jack");
    Expression jim = new TerminalExpression("Jim");
    return new OrExpression(jack, jim);
  }

  public static Expression getMarriedFemaleExpression(){
    // 规则：Julia是一个已婚的女性
    Expression julia = new TerminalExpression("Julia");
    Expression married = new TerminalExpression("Married");
    return new AndExpression(julia, married);
  }

  public static void main(String[] args) {
    Expression isMale = getMaleExpression();
    Expression isMarriedFemale = getMarriedFemaleExpression();

    System.out.println("Jack is male? " + isMale.interpret("Jack"));
    System.out.println("Julia is a married female? " +isMarriedFemale.interpret("Married Julia"));
  }

}
